﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;

namespace Infinity.Expressions.Core
{
	public class Variable
	{
		/// <summary>
		/// Változó neve
		/// </summary>
		public string Name { get; set; }
		/// <summary>
		/// Változó típusa
		/// </summary>
		public Type Type { get; set; }
		/// <summary>
		/// Változó aktuális értéke
		/// </summary>
		public object Value { get; set; }

		/// <summary>
		/// A szintaxis fában reprezentálja a változót
		/// </summary>
		protected ParameterExpression variableExpression;

		/// <summary>
		/// A változó Expression-je. 
		/// </summary>
		public ParameterExpression ToExpression()
		{
			if (variableExpression == null)
			{
				variableExpression = Expression.Parameter(Type, Name);
			}
			else if (variableExpression.Name != Name || variableExpression.Type != Type)
			{
				variableExpression = Expression.Parameter(Type, Name);
			}
			return variableExpression;
		}
	}
}
